
#ifndef TIANYU_COMMON_BASE_H_
#define TIANYU_COMMON_BASE_H_

#include <sys/types.h>
#ifndef _MSC_VER
#include <sys/ipc.h>
#include <netinet/in.h>
#endif
#include <time.h>
#include <string>
#include <algorithm> 
#include "common_define.h"
#include "string_common.h"

namespace common
{
	/*
	 *@brief 设置UTC标准时间和本地时间时差　
	 */
	int32_t SetUTCAndLocalDiff( );

	/*
	* 将 ptm中的HHMISS重置
	*/
	time_t RebuildTime( struct tm *tm, int HH24MISS );

	/*
	* 根据YYYYMMDDHH24MISS 形成新的时间
	*/
	time_t RebuildTime( int YYYYMMDD, int HH24MISS );

	/*
	* 根据时间计算本周一00:00:00时刻
	*/
	time_t GetWeekTime( time_t time );
	/*
	* 根据时间计算本周日00:00:00时刻 （周日 周一 .... 周六 为一周）
	*/
	time_t GetWeekSundyTime( time_t time );

	int64_t GetCurrentMillisecond( );

	time_t GetCurrentSecond( );

	int32_t GetWeekDay( time_t sec );

	std::string GetSuffix( const std::string& str );

	template< typename T >
	bool RandMInN( const T& in, int32_t m, T& out )
	{
		if( m > ( int32_t )in.size( ) )
		{
			return false;
		}
		out = in;
		std::random_shuffle( out.begin( ), out.end( ) );
		out.resize( m );	
		return true;
	}

#ifdef _MSC_VER

#else
	/**
	* @brief 获取最接近的最大的2的指数次幂
	*
	* @param value
	*
	* @return
	*/
	uint32_t RoundupPowOfTwo(uint32_t value);
#endif
}

#endif

